package pe.com.pgn.consolidadorventas.servidorcentral.web;

import java.io.UnsupportedEncodingException;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import pe.com.pgn.consolidadorventas.servidorcentral.dbo.Estacion;
import pe.com.pgn.consolidadorventas.servidorcentral.service.EstacionService;
import pe.com.pgn.consolidadorventas.servidorcentral.service.ServidorCentralService;
import pe.com.pgn.consolidadorventas.servidorcentral.util.Constantes;
import pe.com.pgn.consolidadorventas.servidorcentral.util.FechasUtil;
import pe.com.pgn.consolidadorventas.servidorcentral.util.LoggerUtil;

@Controller(value="estacionesController")
public class EstacionesController{

	static Logger logger = Logger.getLogger(EstacionesController.class);

	@Autowired
	@Qualifier("servidorCentralServiceImpl")
	ServidorCentralService servidorCentralService;
	
	@Autowired
	@Qualifier("estacionServiceImpl")
	EstacionService estacionService;
	
	String vista;
	
	public EstacionesController(){
		vista = "listarEstaciones";
	}
	
	@RequestMapping(value="/listarEstaciones.php")
	public ModelAndView listarEstaciones(HttpServletRequest request, HttpServletResponse response){
		ModelAndView model = new ModelAndView(vista);
		String accion=request.getParameter("accion");
		if(accion!=null){
			Estacion e = null;
			if(accion.equals("registrar")){
				String codEstacion = request.getParameter("codEstacion");
				String nombreEstacion = request.getParameter("nombreEstacion");
				String nomAux = "";
				try {
					nomAux = new String(nombreEstacion.getBytes("ISO8859-1"),"UTF-8");
				} catch (UnsupportedEncodingException e1) {
					LoggerUtil.error(logger,e1.getMessage());
					nomAux = nombreEstacion;
				} 
				String ipEstacion = request.getParameter("ipEstacion");
				String puertoEstacion = request.getParameter("puertoEstacion");
				int tipoVenta = Integer.parseInt(request.getParameter("tipoVenta"));
				String modoRecarga = request.getParameter("modoRecarga");
				int estado = Integer.parseInt(request.getParameter("estado"));
				String fechaInicioOper = request.getParameter("fechaInicioOperaciones");
				int timeOut = Integer.parseInt(request.getParameter("timeOutWs"));
				e = new Estacion();
				e.setCodEstacion(codEstacion);
				e.setNombreEstacion(nomAux);
				e.setIp(ipEstacion);
				e.setPuerto(puertoEstacion);
				e.setTipoVenta(tipoVenta);
				e.setHabilitado(estado);
				e.setTimeOutWs(timeOut);
				e.setModoRecarga(modoRecarga);
				e.setFechaInicioOperaciones(FechasUtil.formatearStringToDate(fechaInicioOper));
				estacionService.registrarEstacion(e);
			}
			
			if(accion.equals("actualizar")){
				int idEstacion = Integer.parseInt(request.getParameter("idEstacion"));
				String codEstacion = request.getParameter("codEstacion");
				String nombreEstacion = request.getParameter("nombreEstacion");
				String nomAux = "";
				try {
					nomAux = new String(nombreEstacion.getBytes("ISO8859-1"),"UTF-8");
				} catch (UnsupportedEncodingException e1) {
					LoggerUtil.error(logger,e1.getMessage());
					nomAux = nombreEstacion;
				} 
				String ipEstacion = request.getParameter("ipEstacion");
				String puertoEstacion = request.getParameter("puertoEstacion");
				int tipoVenta = Integer.parseInt(request.getParameter("tipoVenta"));
				String modoRecarga = request.getParameter("modoRecarga");
				int estado = Integer.parseInt(request.getParameter("estado"));
				String fechaInicioOper = request.getParameter("fechaInicioOperaciones");
				int timeOut = Integer.parseInt(request.getParameter("timeOutWs"));
				e = new Estacion();
				e.setIdEstacion(idEstacion);
				e.setCodEstacion(codEstacion);
				e.setNombreEstacion(nomAux);
				e.setIp(ipEstacion);
				e.setPuerto(puertoEstacion);
				e.setTipoVenta(tipoVenta);
				e.setHabilitado(estado);
				e.setTimeOutWs(timeOut);
				e.setModoRecarga(modoRecarga);
				e.setFechaInicioOperaciones(FechasUtil.formatearStringToDate(fechaInicioOper));
				estacionService.actualizarEstacion(e);
			}
		}
		
		List<Estacion> listaEstaciones = estacionService.obtenerEstaciones();
		String defaultTimeOut = String.valueOf(Constantes.DEFAULT_TIMEOUT);
		model.addObject("listaEstaciones",listaEstaciones);
		model.addObject("defaultTimeOut",defaultTimeOut);
		return model;
	}

	@RequestMapping(value="/cambiarEstadoEstacion.php")
	public ModelAndView cambiarEstadoEstacion(HttpServletRequest request, HttpServletResponse response){
		ModelAndView model = new ModelAndView("estadoEstacion");
		String idEstacion = request.getParameter("idEstacion");
		String estado = request.getParameter("estado");
		int id = 0;
		int habilitado = 0;
		try{
			id = Integer.parseInt(idEstacion);
			habilitado = Integer.parseInt(estado);
			Estacion e = estacionService.obtenerEstacionXId(id);
			e.setIdEstacion(id);
			e.setHabilitado(habilitado);
			estacionService.actualizarEstacion(e);
			model.addObject("estacion",e);
		}catch(NumberFormatException nfe){
			LoggerUtil.error(logger,nfe.getMessage());
		}
		return model;
	}
	
	@RequestMapping(value="/cargarEstacion.php")
	public ModelAndView cargarEstacion(HttpServletRequest request, HttpServletResponse response){
		ModelAndView model = new ModelAndView("edicionEstacion");
		String idEstacion = request.getParameter("idEstacion");
		int id = 0;
		try{
			id = Integer.parseInt(idEstacion);
			Estacion e = estacionService.obtenerEstacionXId(id);
			model.addObject("estacion",e);
		}catch(NumberFormatException nfe){
			LoggerUtil.error(logger,nfe.getMessage());
		}
		return model;
	}
	
	@RequestMapping(value="/eliminarEstacion.php")
	public String eliminarEstacion(HttpServletRequest request, HttpServletResponse response){
		String idEstacion = request.getParameter("idEstacion");
		if(idEstacion!=null){
			try{
				int id = Integer.parseInt(idEstacion);
				estacionService.eliminarEstacion(id);
			}catch(NumberFormatException e){
				LoggerUtil.error(logger,e.getMessage());
			}
		}
		return "redirect:"+vista+".php";
	}

}
